#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H

#include "model/data.h"

#include <QScrollArea>
#include <QWidget>
#include <QLabel>

///
/// \brief The MessageShowArea class 聊天消息展示区域
/// \remark 负责展示会话中的聊天消息
///
class MessageShowArea : public QScrollArea
{
    Q_OBJECT

    // ================================================
    // ===================【私有成员】===================
    // ================================================
private:
    QWidget *container = nullptr;

    // ================================================
    // ===================【公有方法】===================
    // ================================================
public:
    MessageShowArea();
    void addMessage(bool isLeft, const model::Message &message);
    void addFontMessage(bool isLeft, const model::Message &message);
    void clear();
};

///
/// \brief The MessageItem class 聊天消息
/// \remarks 聊天消息元素要支持文本、图片、文件、语音消息
/// - 当前只考虑文本消息，其余三个后续添加TODO???
///
class MessageItem : public QWidget
{
    Q_OBJECT

    // ================================================
    // ===================【私有成员】===================
    // ================================================
private:
    bool isLeft = false;                // 当前消息是否是左侧消息(决定样式构建)

    // ================================================
    // ===================【公有方法】===================
    // ================================================
public:
    MessageItem(bool isLeft);
    static inline MessageItem *makeMessageItem(bool isLeft, const model::Message &message); // 构造 MessageItem 的工厂方法
    static inline QWidget *makeTextMessageItem(bool isLeft, const QString &text);
    static inline QWidget *makeImageMessageItem();
    static inline QWidget *makeFileMessageItem();
    static inline QWidget *makeSpeechMessageItem();
};

///
/// \brief The MessageContentLabel class 文本消息正文展示类
///
class MessageContentLabel : public QWidget
{
    Q_OBJECT
private:
    QLabel *label = nullptr;
    bool isLeft = false;

public:
    MessageContentLabel(bool isLeft, const QString &text);
    void paintEvent(QPaintEvent *event) override;
};

#endif // MESSAGESHOWAREA_H
